import com.beans.*;
import com.sun.org.apache.bcel.internal.generic.ACONST_NULL;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

/**
 * Created with IntelliJ IDEA.
 * Description: spring使用注释的方式
 */
public class App {
    public static void main(String[] args) {
        // 1. 先得到 spring 上下文对象
        ApplicationContext context = new ClassPathXmlApplicationContext("spring-config.xml");

        // bean的命名规则：
        // 当没有设置 name 属性时，bean的名字就是方法名
        // 如果设置了 name 属性，就只能通过 name 来获取，方法名无法获取了
        User user = context.getBean("getUser", User.class);
        System.out.println(user.toString());


//        // 2. 得到bean
//        UserController controller = context.getBean("userController", UserController.class);
//        UserService service = context.getBean("userService", UserService.class);
//        UserRepository repository = context.getBean("userRepository", UserRepository.class);
//        UserConfiguration configuration = context.getBean("userConfiguration", UserConfiguration.class);
//        UserComponent component = context.getBean("userComponent", UserComponent.class);
//        //    注意：Bean命名规则是如果是大驼峰，第一个字符小写;如果是单词缩写，即至少第一个和第二个字符都是大写，那么bean的名字就是类名
//        APIComponent apiComponent = context.getBean("APIComponent", APIComponent.class);
//        // 3. 调用方法
//        apiComponent.sayHi();
//        controller.sayHi();
//        service.sayHi();
//        repository.sayHi();
//        configuration.sayHi();
//        component.sayHi();
    }
}
